import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import { fileURLToPath, URL } from "node:url";
import VueJsx from '@vitejs/plugin-vue-jsx'
// vite.config.ts
import UnoCSS from 'unocss/vite'


const root: string = process.cwd();
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  // 环境变量
  const env = loadEnv(mode, root, "");
  return {
    //在plugins数组中添加[vue()]，启用Vue插件。这使得Vite能够处理.vue文件，实现对Vue SFC的编译、热更新等功能。
    plugins: [vue(),VueJsx(),UnoCSS()],
    base: env.VITE_PUBLIC_PATH || "/",
    resolve: {
      alias: {
        "@": fileURLToPath(new URL("./src", import.meta.url)),
        "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js",
      },
      //resolve.extensions数组指定了导入语句省略文件扩展名时Vite尝试自动补全的顺序。
      extensions: [
        ".mjs",
        ".js",
        ".ts",
        ".jsx",
        ".tsx",
        ".json",
        ".scss",
        ".css",
      ],
    },
    // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
    //
    // 1. prevent vite from obscuring rust errors
    clearScreen: false,
    // 2. tauri expects a fixed port, fail if that port is not available
    server: {
      port: 1420,
      strictPort: true, //设置为true，表示若端口已被占用，Vite服务启动失败
      watch: {
        // 3. tell vite to ignore watching `src-tauri`
        ignored: ["**/src-tauri/**"], //使Vite在文件监视时忽略src-tauri及其子目录下的所有文件变化。这对于避免不必要的重建和提高开发效率有益。
      },
      hmr:{
        overlay: false
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `
          @import "./src/styles/variables.scss";
          `,
          javascriptEnabled: true
        }
      }
    },
    //define对象用于向构建产物中注入全局常量，这些常量在运行时不可更改：
    define: {
      // 空对象，可能用于防止意外访问未定义的环境变量。
      "process.env": {},
      //__VERSION__ 通过JSON.stringify(process.env.npm_package_version)获取当前项目的npm package版本号，并将其作为字符串常量注入。在代码中可以通过__VERSION__访问项目版本。
      __VERSION__: JSON.stringify(process.env.npm_package_version),
    },
  };
});
